X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C92FF3.83E3D6D7@onstor-exch02.onstor.net>; Thu, 16 Oct 2008 17:58:49 -0700
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01C92FF3.83E3D6D7"
Content-class: urn:content-classes:message
Subject: RE: Functional Spec for Restarting Aborted Mirror Sessions
Date: Thu, 16 Oct 2008 17:58:49 -0700
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E0AE22BBF@onstor-exch02.onstor.net>
In-Reply-To: <BB375AF679D4A34E9CA8DFA650E2B04E0C0D879B@onstor-exch02.onstor.net>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: Functional Spec for Restarting Aborted Mirror Sessions
Thread-Index: Ackvwc2p16X2XnVpSBWREx63PQrjQQADPGaAAABkD3AAAeHo0AAGUyGA
From: "Chris Vandever" <chris.vandever@onstor.com>
To: "Jonathan Goldick" <jonathan.goldick@onstor.com>,
	"Deepak Veliath" <deepak.veliath@onstor.com>,
	"dl-Design Review" <dl-designreview@onstor.com>
Cc: "dl-Kegg" <dl-Kegg@onstor.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C92FF3.83E3D6D7
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

*	Section 5: I agree that if we can store this on either the
source or target volume we'd be better off than using the clusDb, which
is intended for config information.
*	Section 5:  I also agree we're better off if we can periodically
checkpoint which blocks reached stable storage.  Assuming they've made
it after some period of time or number of I/Os seems just as dangerous
as the current mechanism of assuming they made it, period.
*	Section 6:  Regardless of what command is used to initiate a
restart, we need to document the behavior when an aborted session can't
be restarted.  Is the snapshot deleted at that point?  Is there a reason
to keep it if the failure isn't due to a transient problem?
*	Section 9:  Item 1:  I'm not sure what currently happens on vsvr
failover, but I believe we used to have problems with it.  Is this
something we need to test here, or do we already seamlessly pickup where
we left off when the failover completes?
*	Section 9:  Item 4:  "Reverting an EverON version", AKA
downgrade, is NOT supported, period.  Certainly, it is NOT supported
when said upgrade required a clusDb upgrade.  We explicitly instruct the
customer to preserve the old version on the secondary flash until they
are 100% satisfied that the new version of software is meeting their
needs.  (Of course, we all know how well customers follow instructions.
:-()

ChrisV

_____________________________________________
From: Jonathan Goldick=20
Sent: Thursday, October 16, 2008 2:47 PM
To: Deepak Veliath; dl-Design Review
Cc: dl-Kegg
Subject: RE: Functional Spec for Restarting Aborted Mirror Sessions

See JG>

_____________________________________________
From: Deepak Veliath=20
Sent: Thursday, October 16, 2008 2:05 PM
To: Jonathan Goldick; dl-Design Review
Cc: dl-Kegg
Subject: RE: Functional Spec for Restarting Aborted Mirror Sessions

Hello Jonathan,
1.	Section 5, as you make clear, the key to restarting is to know
what the target has on disk, basically a checkpoint marker.  Since we
send blocks in order can we just periodically write out the last block
number know to have hit disk?  A super-block field would be easy.  While
an implementation note, this would avoid changing the cluster DB and
that is relevant here.  When all the blocks have been received we can
just set the number to the last block number in the file system so it
handles a lot of the cases you have mentioned.

We issue I/Os to read the blocks on the source in order.  But there
seems to be no guarantee the I/Os finish and return in that order.  We
send out blocks to the target as soon as they have been read.  On the
target again the I/O is issued as they come in over the RMC connection
but there seems to be no guarantee of ordering.  I realize our current
IO scheduler might guarantee some sort of ordering, but this could
change in the future.  The mirroring sub-system shouldn't expect it
works a certain way unless the IO scheduler exports a mechanism to
guarantee this ordering.
JG> Max already commented on this.
   =20
2.	Section 6, I'm not sure that the restart command adds a lot,
avoiding the creation of a new snapshot is the only clear addition over
mirror start and that doesn't seem worth creating a new command verb.

Since creating a new snapshot consumes some amount of space (and will
mean space can be allocated as the FS is modified), I felt a "restart"
only command would allow a previously aborted mirror to run through to
completion without potentially consuming space in the FS.
JG> As an architectural principle we want the absolute minimum command
verbs.  Whether or not we have the option of restarting a previously
aborted mirror session is something that mirroring can detect when it
talks to the target, an admin should not need to know that in advance.
It would be much easier to use if mirror start first completed any
aborted session that was relevant/possible and then created a new
snapshot to roll forward.  That way the admin always gets the same
result, a new snapshot and the minimum transfer of blocks.

=20
3.	Section 6, mirror start MIRRORNAME [skiprestart] To date we have
not used whole words for command options in the shell, but instead use
things like -a, -b, etc.  Other than testing, why would a customer ever
want to skip a restart?  While a large transfer can happen at any point,
the real problem here is baseline transfers so if the target is garbage
in some way we can just start over by detecting that, rather than having
the administrator try to figure it out.  This also reduces the test
cases and the need to change the GUI or the CLI.=20

I see a lot of "force" options in the existing mirroring commands --
they were the basis for this choice.  I'll change it to "-s".  As to the
need for such an option, I felt a mechanism to bypass the whole restart
logic and being able to fall-back on to the traditional logic might be
desired by an administrator.  The baseline transfer has nothing to do
with this option and can be completed successfully with or without this
option.
JG> I really don't see a requirement to have this option.  How would an
admin know when to use this?  They have no way of knowing when this is a
good idea, but mirroring should be able to figure it out and do the
right thing.

Thank you,
veliath
=20

=20

=20

________________________________

From: Deepak Veliath=20
Sent: Thursday, October 16, 2008 12:03 PM
To: dl-Design Review
Subject: Functional Spec for Restarting Aborted Mirror Sessions

=20

\\mightydog\software\Kegg\Functional
Specs\RestartAbortedMirrorSessionsFuncSpec.doc
<file:///\\mightydog\software\Kegg\Functional%20Specs\RestartAbortedMirr
orSessionsFuncSpec.doc>=20


------_=_NextPart_001_01C92FF3.83E3D6D7
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
6.5.7653.38">
<TITLE>RE: Functional Spec for Restarting Aborted Mirror =
Sessions</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Symbol">&#183;<FONT FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">Section 5: I agree that if we can store this on =
either the source or target volume we</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">&#8217;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">d be better off than using the clusDb, which is =
intended for</FONT> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">config information</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">.</FONT></SPAN></P>

<P><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Symbol">&#183;<FONT FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Section =
5:&nbsp; I also agree we</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">&#8217;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">re better =
off if we can</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">periodically checkpoint which blocks reached stable =
storage.</FONT>&nbsp;<FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial"></FONT> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">Assuming they</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">&#8217;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">ve made</FONT> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">it after some period of time or number of I/Os seems just =
as dangerous as the current mechanism of</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">assuming</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial"></FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">they =
made it, period.</FONT></SPAN></P>

<P><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Symbol">&#183;<FONT FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Section =
6:&nbsp;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> =
<FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Regardless of what =
command is used to initiate a restart, we ne</FONT><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">ed to document the =
behavior</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial"> =
when</FONT> <FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">an aborted =
session can</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">&#8217;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">t be =
restarted.</FONT>&nbsp;<FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial"> =
I</FONT><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">s the snapshot =
deleted</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial"> at that =
point</FONT><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">?&nbsp; Is =
there a reason to keep it</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial"> if the =
failure isn</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">&#8217;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">t due to =
a transient problem?</FONT></SPAN></P>

<P><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Symbol">&#183;<FONT FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Section =
9:&nbsp;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> =
<FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Item 1</FONT><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">:&nbsp;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">I</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">&#8217;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">m not =
sure what currently happens on vsvr failover</FONT><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">, but I believe we used to =
have problems with it.</FONT>&nbsp;<FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial"> I</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">s this</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">s</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">omething we need to test</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">h</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">ere</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">, or do =
we already seamlessly</FONT> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">pickup where we left off when the failover =
completes</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">?</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Symbol">&#183;<FONT FACE=3D"Courier =
New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></FONT></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Section =
9:&nbsp; Item 4</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">:&nbsp;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">&#8220;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Reverting =
an EverON version</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">&#8221;</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">, AKA =
downgrade, is NOT supported, period.</FONT><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial"></FONT>&nbsp;<FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial"> C</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">ertainly, it is NOT supported when said upgrade required =
a clusDb upgrade.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us">&nbsp;<FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial"></FONT> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">W</FONT><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">e =
explicitly instruct the customer to preserve the old version on the =
secondary flash until they are 100% satisfied that the new</FONT><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial"> version of software is =
meeting their needs.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us">&nbsp;<FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial"> =
(</FONT><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">Of course, we =
all know how well customers follow instructions.</FONT>&nbsp;<FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial"></FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> <FONT FACE=3D"Wingdings" =
SIZE=3D2>L</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">)</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">ChrisV</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>_____________________________________________<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>From:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> Jonathan =
Goldick<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>Sent:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> Thursday, =
October 16, 2008 2:47 PM<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>To:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> Deepak =
Veliath; dl-Design Review<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>Cc:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> dl-Kegg<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>Subject:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> RE: =
Functional Spec for Restarting Aborted Mirror =
Sessions</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">See JG&gt;</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Tahoma">_____________________________________________<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">From:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> Deepak Veliath<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">Sent:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> Thursday, Oct</FONT><FONT =
SIZE=3D2 FACE=3D"Tahoma">ober 16, 2008 2:05 PM<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">To:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> Jonathan Goldick; =
dl-Design Review<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">Cc:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> dl-Kegg<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">Subject:</FONT></B></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Tahoma"> RE: Functional Spec for Restarting Aborted Mirror =
Sessions</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">Hello Jonathan,</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Section 5, as you make =
clear, the key to restarting is to know what the target has on disk, =
bas</FONT><FONT SIZE=3D2 FACE=3D"Verdana">ically a checkpoint =
marker.&nbsp; Since we send blocks in order can we just periodically =
write out the last block number know to have hit disk?&nbsp; A =
super-block field would be easy.&nbsp; While an implementation note, =
this would avoid changing the cluster DB and that</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana"></FONT> <FONT SIZE=3D2 FACE=3D"Verdana">is relevant =
here.&nbsp; When all the blocks have been received we can just set the =
number to the last block number in the file system so it handles a lot =
of the cases you have mentioned.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">We issue I/Os to read the blocks on the source in =
order.&nbsp; But there seems</FONT><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana"> to be no guarantee the I/Os finish and return in that =
order.&nbsp; We send out blocks to the target as soon as they have been =
read.&nbsp; On the target again the I/O is issued as they come in over =
the RMC connection but there seems to be no guarantee of =
ordering.</FONT>&nbsp;<FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana"></FONT> <FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">I realize our current IO scheduler might guarantee some =
sort of ordering, but this could change in the future.&nbsp; The =
mirroring sub-system shouldn't expect it works a certain way unless the =
IO scheduler exports a mechanism to guarantee this =
ordering.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">JG&gt; Max</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial"> already commented on this.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;&nbsp;&nbsp; </FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Section 6, =
I</FONT><FONT SIZE=3D2 FACE=3D"Verdana">&#8217;</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">m not sure that the restart command adds a lot, =
avoiding the creation of a new snapshot is the only clear addition over =
mirror start and that doesn</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">&#8217;</FONT><FONT SIZE=3D2 FACE=3D"Verdana">t seem =
worth creating a new command verb.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">Since creating a new snapshot consumes some amount of =
space (and will mean space can be allocated as the FS is modified), I =
felt a &quot;restart&quot; only command would allow a previously aborted =
mirror to run through to completion without potentially consuming =
sp</FONT><FONT COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">a</FONT><FONT =
COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">ce in the =
FS.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Verdana">JG&gt; As an architectural principle we want the =
absolute minimum command verbs.&nbsp; Whether or not we have the option =
of restarting a previously aborted mirror session is something that =
mirroring can detect when it talks to the target, an admin =
sh</FONT><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Verdana">ould not need =
to know that in advance.&nbsp; It would be much easier to use if mirror =
start first completed any aborted session that was relevant/possible and =
then created a new snapshot to roll forward.&nbsp; That way the admin =
always gets the same result, a new s</FONT><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Verdana">n</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Verdana">apshot and the minimum transfer of =
blocks.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Section 6, mirror =
start MIRRORNAME [skiprestart] To date we have not used whole words for =
command options in the shell, but instead use things like</FONT> <FONT =
SIZE=3D2 FACE=3D"Verdana">&#8211;</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">a, -b, etc.&nbsp; Other than testing, why would a =
customer ever</FONT><FONT SIZE=3D2 FACE=3D"Verdana"> want to skip a =
restart?&nbsp; While a large transfer can happen at any point, the real =
problem here is baseline transfers so if the target is garbage in some =
way we can just start over by detecting that, rather than having the =
administrator try to figure it o</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">u</FONT><FONT SIZE=3D2 FACE=3D"Verdana">t.&nbsp; This =
also reduces the test cases and the need to change the GUI or the CLI. =
</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">I see a lot of &quot;force&quot; options in the =
existing mirroring commands -- they were the basis for this =
choice.&nbsp; I'll change it to &quot;-s&quot;.&nbsp; As to the need for =
such an option, I felt</FONT> <FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">a mechanism to bypass the whole restart logic and being =
able to fall-back on to the traditional logic might be desired by an =
administrator.&nbsp; The baseline transfer has nothing to do with this =
option and can be completed successfully with or without this =
op</FONT><FONT COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">t</FONT><FONT =
COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">ion.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">JG&gt; I really don</FONT><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">&#8217;</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">t see a requirement to have this option.&nbsp; How would =
an admin know when to use this?&nbsp; They have no way of knowing when =
this is a good idea, but mirroring should be able to figure it out and =
do the right thing.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">Thank you,</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">veliath</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">________________________________</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">From: Deepak Veliath </FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">Sent: Thursday, October 16, 2008 12:03 =
PM</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Verdana">To: =
dl-Design Review</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">Subject: Functional Spec for Restarting Aborted Mirror =
Sessions</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"></SPAN><A =
HREF=3D"file://\\mightydog\software\Kegg\Functional"><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><U><FONT COLOR=3D"#0000FF" =
SIZE=3D2 FACE=3D"Verdana">\\</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Verdana">mightydog\</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Verdana">software\Kegg\Functional</FONT></U></SPAN><SPAN =
LANG=3D"en-us"></SPAN></A><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Verdana"> =
Specs\RestartAbortedMirrorSessionsFuncSpec.doc &lt;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><A =
HREF=3D"file:///\\mightydog\software\Kegg\Functional%20Specs\RestartAbort=
edMirrorSessionsFuncSpec.doc"><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><U></U><U><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Verdana">file:///\\mightydog\software\Kegg\Functional%20Specs\Res=
tartAbortedMi</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Verdana">rrorSessionsFuncSpec.doc</FONT></U></SPAN><SPAN =
LANG=3D"en-us"></SPAN></A><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Verdana">&gt; </FONT></SPAN></P>

</BODY>
</HTML>
------_=_NextPart_001_01C92FF3.83E3D6D7--
